package com.shop.cereshop.commons.tencent.im.service;

import com.shop.cereshop.commons.tencent.im.enums.im.MsgTypeEnum;
import com.shop.cereshop.commons.tencent.im.model.msg.data.MsgData;
import com.shop.cereshop.commons.tencent.im.model.msg.dto.MsgRequestDTO;
import com.shop.cereshop.commons.tencent.im.model.msg.element.TIMMsgElement;
import com.shop.cereshop.commons.tencent.im.model.response.SendGroupMsgResponse;
import com.shop.cereshop.commons.tencent.im.model.response.SendMsgResponse;
import com.shop.cereshop.commons.tencent.im.model.response.TIMBaseResponse;

/**
 * @description: 腾讯云IM 消息接口
 * @author zdd
 * @date 2025/9/3 14:30
 * @version 1.0
 */
public interface TimMsgService {

    /**
     * 发送单聊消息
     * @param msgType 消息类型
     * @param msgData 消息数据对象
     * @param requestDTO 消息request传输数据
     * @return 响应结果
     */
    SendMsgResponse sendC2cMsg(MsgTypeEnum msgType, MsgData msgData, MsgRequestDTO requestDTO);

    /**
     * 发送单聊消息
     * @param msgElement 消息元素
     * @param requestDTO 消息request传输数据
     * @return 响应结果
     */
    SendMsgResponse sendC2cMsg(TIMMsgElement msgElement, MsgRequestDTO requestDTO);

    /**
     * 发送群组消息
     * @param msgType 消息类型
     * @param msgData 消息数据对象
     * @param requestDTO 消息request传输数据
     * @return 响应结果
     */
    SendGroupMsgResponse sendGroupMsg(MsgTypeEnum msgType, MsgData msgData, MsgRequestDTO requestDTO);

    /**
     * 修改单聊历史消息
     * @param msgType 消息类型
     * @param msgData 消息数据对象
     * @param requestDTO 消息request传输数据
     * @return 响应结果
     */
    TIMBaseResponse modifyC2cMsg(MsgTypeEnum msgType, MsgData msgData, MsgRequestDTO requestDTO);

    /**
     * 修改群聊历史消息
     * @param msgType 消息类型
     * @param msgData 消息数据对象
     * @param requestDTO 消息request传输数据
     * @return 响应结果
     */
    TIMBaseResponse modifyGroupMsg(MsgTypeEnum msgType, MsgData msgData, MsgRequestDTO requestDTO);

    /**
     * 发送开启或禁用用户IM通知
     * @param receiverId 接收者id
     * @param status 开启状态: ON-开启, OFF-禁用
     * @return 响应结果
     */
    SendMsgResponse sendDisableUserImNotice(Long receiverId, String status);

}
